package com.czh.www;

/**
 * 字符串与byte数组之间转换的工具类
 * 
 * @author idcomcn
 * 
 */
public class HexDataUtils {

	/**
	 * 
	 * HexData数据形式的字符串转为字节流
	 * 
	 * //idcomcn2012 //15:08 2012-10-19
	 * 
	 * @param strHex
	 * @return
	 */
	public static byte[] hexData2Bytes(String strHex) {
		String strTmp = strHex;
		// 解密后的字节流存放在此
		byte[] bys = new byte[strTmp.length() / 2];
		int iA = 0;
		int iB = 0;
		for (iA = 0; iA < strTmp.length(); iA++) {
			if (iA % 2 == 0) {
				// 这是偶数
				bys[iB++] = Integer.decode("0X" + strTmp.charAt(iA) + "" + strTmp.charAt(iA + 1)).byteValue();
			}
			// else {
			// System.out.print("x是奇数");
			// }
		}

		return bys;
	}

	/**
	 * 
	 * 字节流转为 HexData数据形式的字符串
	 * 
	 * //idcomcn2012 //15:08 2012-10-19
	 * 
	 * @param strHex
	 * @return
	 */
	public static String bytes2HexData(byte[] bys) {
		if (bys == null || bys.length == 0) {
			return null;
		}
		return bytes2HexData(bys, bys.length);
	}

	/**
	 * 
	 * 字节流转为 HexData数据形式的字符串；
	 * 
	 * 只转换前面指定长度的字节
	 * 
	 * //idcomcn2012 //15:08 2012-10-19
	 * 
	 * @param strHex
	 * @return
	 */
	public static String bytes2HexData(byte[] bys, int length) {
		int len = bys.length;
		if (len > length) {
			len = length;
		}
		StringBuilder b = new StringBuilder();
		int iA = 0;
		for (iA = 0; iA < len; iA++) {
			b.append(String.format("%1$02X", bys[iA]));
		}

		return b.toString();
	}

	/**
	 * 
	 * 分割HexData数据形式的字符串
	 * 
	 * 例如："880001000A0500001C0D090402010E57" --> "88 00 01 00 0A 05 00 00 1C 0D 09
	 * 04 02 01 0E 57"
	 * 
	 * //idcomcn2012 //15:08 2012-10-19
	 * 
	 * @param strHex
	 * @return
	 */
	public static String hexDataAddSpace(String strHex) {
		String strTmp = strHex;
		int iA = 0;
		StringBuilder sb = new StringBuilder();
		for (iA = 0; iA < strTmp.length(); iA++) {
			if (iA % 2 == 0) {
				// 这是偶数
				sb.append(strTmp.charAt(iA) + "" + strTmp.charAt(iA + 1));
				sb.append(" ");
			}
			// else {
			// System.out.print("x是奇数");
			// }
		}

		return sb.toString().trim();
	}

}
